package com.fotkidemo.tasks;

import android.os.AsyncTask;
import android.util.Log;
import com.fotkidemo.BuildConfig;
import com.fotkidemo.beans.Image;
import com.fotkidemo.network.NetworkUtil;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: roma
 * Date: 6/25/12
 * Time: 4:41 PM
 * To change this template use File | Settings | File Templates.
 */

//Асинхронная загрузка набора фото с указанием прогресса загрузки
public class LoadTask extends AsyncTask<List<Image>, String, Boolean> {
    private static final String TAG = "LoadTask";
    private String albumDir;
    private IProgressTracker progressTracker;

    public LoadTask(String albumDir) {
        this.albumDir = albumDir;
    }

    @Override
    protected Boolean doInBackground(List<Image>... lists) {
        try {
            for (Image image : lists[0]) {
                File imageFile = new File(albumDir + File.separator + image.getTitle());

                if (BuildConfig.DEBUG)
                    Log.d(TAG, "Download image to file " + imageFile.getPath());

                publishProgress("Downloading " + image.getTitle());
                NetworkUtil.downloadToFile(image.getHrefL(), imageFile);
            }
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            return false;
        }
        return true;
    }

    /**
     * Отслеживание прогресса загрузки делегируется определенному классу
     * @param progressTracker
     */
    public void setProgressTracker(IProgressTracker progressTracker) {
        this.progressTracker = progressTracker;
        if (progressTracker != null) {
            progressTracker.onProgress("Start downloading");
        }
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        if (progressTracker != null) {
            progressTracker.onComplete();
        }

        progressTracker = null;
    }

    @Override
    protected void onCancelled() {
        progressTracker = null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        if (progressTracker != null) {
            progressTracker.onProgress(values[0]);
        }
    }
}
